package com.cwnu.sw.cys.core.websocket.domain.vo.resp;

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 聊天消息响应对象
 * 用于封装聊天消息的相关信息，包括发送者信息和消息详情
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ChatMessageResp {

    /**
     * 发送者信息
     * 包含用户id等信息
     */
    @ApiModelProperty("发送者信息")
    private UserInfo fromUser;

    /**
     * 消息详情
     * 包含消息的各种详细信息，如消息id、房间id、发送时间等
     */
    @ApiModelProperty("消息详情")
    private Message message;

    /**
     * 用户信息类
     * 用于封装用户的基本信息，目前仅包含用户id
     */
    @Data
    public static class UserInfo {
        @ApiModelProperty("用户id")
        private Long uid;
    }

    /**
     * 消息类
     * 用于封装消息的详细信息，包括消息id、房间id、发送时间、消息类型、消息内容等
     */
    @Data
    public static class Message {
        @ApiModelProperty("消息id")
        private Long id;
        @ApiModelProperty("房间id")
        private Long roomId;
        @ApiModelProperty("消息发送时间")
        private Date sendTime;
        @ApiModelProperty("消息类型 1正常文本 2.撤回消息")
        private Integer type;
        @ApiModelProperty("消息内容不同的消息类型，内容体不同，见https://www.yuque.com/snab/mallcaht/rkb2uz5k1qqdmcmd")
        private Object body;
        @ApiModelProperty("消息标记")
        private MessageMark messageMark;
    }

    /**
     * 消息标记类
     * 用于封装消息的互动信息，如点赞数、举报数等
     */
    @Data
    public static class MessageMark {
        @ApiModelProperty("点赞数")
        private Integer likeCount;
        @ApiModelProperty("该用户是否已经点赞 0否 1是")
        private Integer userLike;
        @ApiModelProperty("举报数")
        private Integer dislikeCount;
        @ApiModelProperty("该用户是否已经举报 0否 1是")
        private Integer userDislike;
    }
}
